import plugin from "../../../lib/plugins/plugin.js";
import fs from "fs";

let dataPath = "./data/privateUrls.json";

export class sign extends plugin {
  constructor() {
    super({
      name: "[Xs插件]个人签名管理",
      dsc: "个人签名管理",
      event: "message",
      priority: -114514,
      rule: [
        {
          reg: `^#?写入个人签名 (.*) (.*)$`,
          fnc: "addSign",
        },
        {
          reg: `^#?个人签名状态$`,
          fnc: "privateSign",
        },
        {
          reg: `^#?我的签名$`,
          fnc: "mySign",
        },
        {
          reg: `^#?删除签名 (.*)$`,
          fnc: "removeSign",
        },
      ],
    });
  }

  async addSign(e) {
    let name = e.msg.match(/#?写入个人签名 (.*) (.*)$/)[1];
    let url = e.msg.match(/#?写入个人签名 (.*) (.*)$/)[2];
    if (!name || !url) {
      e.reply(`请检查指令是否正确(#写入个人签名+空格+签名名字+空格+个人签名链接)`, true);
      return true;
    } else {
      let res = await fetch(url);
      res = await res.json();
      if (res.code == 1 && res.msg == "Parameter 'uin' is missing." && res.data == "failed") {
        let privateUrls = JSON.parse(fs.readFileSync(dataPath));
        privateUrls.push({ name: name, url: url });
        fs.writeFile(dataPath, JSON.stringify(privateUrls), (err) => {
          if (err) {
            e.reply(`写入签名失败，请重试`, true);
          } else {
            e.reply(`写入成功；`, true);
          }
        });
        return true;
      } else {
        e.reply(`签名错误，请重新写入`, true);
        return true;
      }
    }
  }

  async privateSign(e) {
    let privateUrls = JSON.parse(fs.readFileSync(dataPath));
    if (!privateUrls || privateUrls.length == 0) {
      e.reply(`你还没有写入任何签名链接，请使用【#写入个人签名 签名名字 个人签名链接】以写入签名链接`, true);
      return true;
    } else {
      let reply = "";
      const newprivateUrls = [];
      privateUrls.forEach((item) => {
        if (!newprivateUrls.includes(item)) {
          newprivateUrls.push(item);
        }
      });
      for (let privateUrl of newprivateUrls) {
        let url = privateUrl.url;
        let name = privateUrl.name;
        try {
          let res = await fetch(url);
          res = await res.json();
          if (res.code == 1 && res.msg == "Parameter 'uin' is missing." && res.data == "failed") {
            reply += `签名名称：${name}\n状态：正常✅\n\n`;
          } else {
            reply += `签名名称：${name}\n状态：异常❗\n\n`;
          }
        } catch (err) {
          reply += `签名名称：${name}\n状态：异常❗\n\n`;
        }
      }
      e.reply(reply, true);
      return true;
    }
  }

  async mySign(e) {
    let privateUrls = JSON.parse(fs.readFileSync(dataPath));
    if (!privateUrls || privateUrls.length == 0) {
      e.reply(`你还没有写入任何签名链接，请使用【#写入个人签名 签名名字 个人签名链接】以写入签名链接`, true);
      return true;
    } else {
      let reply = "";
      for (let privateUrl of privateUrls) {
        reply += `${privateUrl.name}: ${privateUrl.url}\n`;
      }
      e.reply(reply, true);
      return true;
    }
    }
    async mySign(e) {
    let privateUrls = JSON.parse(fs.readFileSync(dataPath));
    if (!privateUrls || privateUrls.length == 0) {
      e.reply(`你还没有写入任何签名链接，请使用【#写入个人签名 签名名字 个人签名链接】以写入签名链接`, true);
      return true;
    } else {
      let reply = "";
      for (let privateUrl of privateUrls) {
        reply += `${privateUrl.name}: ${privateUrl.url}\n`;
      }
      e.reply(reply, true);
      return true;
    }
  }

  async removeSign(e) {
    let name = e.msg.match(/^#?删除签名 (.*)$/)[1];
    if (!name) {
      e.reply(`请检查指令是否正确(#删除签名+空格+签名名字)`, true);
      return true;
    } else {
      let privateUrls = JSON.parse(fs.readFileSync(dataPath));
      if (!privateUrls || privateUrls.length == 0) {
        e.reply(`你还没有写入任何签名链接，请使用【#写入个人签名 签名名字 个人签名链接】以写入签名链接`, true);
        return true;
      } else {
        let newprivateUrls = [];
        privateUrls.forEach((item) => {
          if (item.name != name) {
            newprivateUrls.push(item);
          }
        });
        if (newprivateUrls.length == privateUrls.length) {
          e.reply(`你没有名为${name}的签名，请检查签名名字是否正确`, true);
          return true;
        } else {
          fs.writeFile(dataPath, JSON.stringify(newprivateUrls), (err) => {
            if (err) {
              e.reply(`删除签名失败，请重试`, true);
            } else {
              e.reply(`删除成功；`, true);
            }
          });
          return true;
        }
      }
    }
  }
}
    